正文
c语言函数调用指针前加 c语言函数指针调用格式
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言函数前面加个指针是什么意思
表示返回值类型为指针。
char* strset(int n)
{
char* s = (char*)malloc(20*sizeof(char));
sprintf(s,"%d",n);
return s;
}
调用该函数时,返回值就是s字符串的指针。
c语言为什么函数指针调用时为什么加*,就能调用(*函数名)()
第一个程序:a是指向结构体s[0]的指针,a[0]...a[i]就是第0-i个结构体,a[i].s表是结构体中s域;
a[i].s; (*(a+i)).s; (a+i)-s 3个的值是相等的;意思就是当定义一个结构体指针STREC *p_str后,把地址p_str起始的内容结构体化,同时(p_str+1)也是一个指向结构体类型STRECD的指针
其指向的地址为p_str的地址+sizeof(STREC)
sizeof(STREC) = 10(num[10])+2(为了对齐 凑成3*4)+4(int s) = 16byte
贴一段代码,在vc++6.0上跑的
#include stdio.h#includestdlib.h
typedef struct
{
char x[10];
int y;
}str;
void func(str *m,str *n);
void main()
{
str m[16]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};
str *n;
n = (str *)(m); //m为一个void型指针,(str *)将其强制类型转换
func(m,n);
system("pause");
}
void func(str *m,str *n)
{
int i;
for(i=0; i16; i++)
{
printf("%d ",m[i].y);
printf("%d ",(*(m+i)).y);
printf("%d\n",(m+i)-y);
}
printf("%x",n);
printf("%x",n+1);
}
第二个程序
a是指向s[0]的指针,你的意图应该是给数组s[81]赋值;显然*(a+i) == s[i];
*(a+i)也能写成a[i];
C语言 函数指针调用时加星号与不加星号都行是为什么?
定义,因为它是定义。不带“*”,就无法区分是指针还是变量。
:叫做,取地址符。p1=ac语言函数调用指针前加;其实就是把ac语言函数调用指针前加的地址取出来,赋给p1。
你可以这么理解,*P1才是和变量a同一个等级的东西。相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之类的。
我纵观你正在学的知识点,悄悄告诉你一个规律。你是否发现在调用的时候一般是没有*号的。
比如swap(p1,p2);(这里是引用函数,不是定义函数)。
比如for中和scanf中的p++
再比如数组赋值:p=a(这里的a是数组首地址)
像printf和定义指针,一般是*p
请你细细理解,好好品味。
我只是心血来潮答个题。越学到后面你会发现指针很灵活。送我个赞,我得不到什么,但你肯定能得到很多。
关于c语言函数调用指针前加和c语言函数指针调用格式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。