‘壹’ 关于c语言数组的地址
数组名就是数组的首地址啊。
直接使用swaps(a,b)就可以
不过其实你子函数就写错了,根本就不是你所说的用数组地址做形参。而是要求用一个 二维数组或者是指针数组作为实参。
正确的代码如下
#include<string.h>
#include<stdio.h>
chard[100];
voidswaps(char*p,char*q)
{
if(strcmp(p,q)>0)
{
strcpy(d,p);
strcpy(p,q);
strcpy(q,d);
}
}
intmain()
{
chara[]="",b[]="",c[]="";
printf("请输入三个字符串,每输入一个字符串按回车确认 ");
gets(a);
gets(b);
gets(c);
swaps(a,b);
return0;
}
voidswaps(char*p,char*q)就是要求传一个地址(指针),而如果你使用
voidswaps(char*p[],char*q[])则意义就不对了,而是要求一个指针数组
‘贰’ C语言中变量的地址是什么类型的
变量的地址,在C语言中,一般写作指针类型。
不同类型的变量地址,用不同的指针进行保存。
比如,char 类型的地址,使用char*保存,而int型地址,用int *保存。
除此外,部分情况下也会采用整型类型来保存变量地址,具体使用何种整型类型,取决于编译器:
1 16位编译器,地址占16位,2字节,可以使用short或者int保存。
2 32位编译器,地址占32位,4字节,可以使用int或long保存。
3 64位编译器,地址占64位,8字节,可以使用long保存。
不过不推荐使用整型类型保存地址,会带来移植上的不通用。
‘叁’ 请教c语言中形参是数组名这个数组名是地址常量那么怎么接收实参数组名
实参是数组名,即一个地址,形参是数组名,所接收的同样是一个地址,就是所谓的传址调用。靠传递地址来实现对参数的调用。
‘肆’ c语言中,怎么把数组的地址传给一个int型变量
数组地址都可以弱化为指针常量(事实上C的编译器就是这么处理数组的),默认情况下可以直接赋值给其他指针变量一般int类型是4字节,而指针变量的长度和编译器有关,所以直接赋值是非常不安全的(虽然可以这么做,比如char str[100];int a= (int)str;但是我个人极力反对,因为这不是指针正确的用法)‘伍’ C语言,怎样把数组的首地址赋给另一个数组
不能把数组的首地址赋给另一个数组。因为数组名是常量指针类型,初始化之后是不能够被修改的。
有两种办法实现类似功能,一种是创建指针变量,把地址直接赋值指针变量:
例如 int a[100]; int *b=a;
第二种就是直接用循环一一复制每个元素。
例如 for(i=0;i<strlen(a);i++) b[i]=a[i];
‘陆’ C语言数组的地址
其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺
首先讲int a[3] = {2,3,4};
这里的a是这个数组的首地址,比如定义如:int *p = a;这时如果你进行如下操作:
p++;
printf("%d\n",*p);
结果会是输出2,也就是说p+1相当于数组索引加1,但是像你所问的为什么&a和a是相同的 ,首先要知道他们分别代表什么意思,a:像上面所说的是数组的首地址,做自加运算会根据数组类型来计算偏移量,那么&a是什么东西呢,实际上它也是一个指针,是指向一个具有3个元素的数组的指针,如何理解,看以下定义:
如果你定义int *q = &a;这时编译器肯定报错,绘制出数据类型不一致,那么你这样样定义就没有问题:int (*q)[3] = &a;这时如果你再对q进行++操作,那么加的就不同了,如相面的p++操作后p的值会加4,而这里q++操作后的值会加12,也就是跳过3个数组元素,然而,确实这两个指针的初始值是一样的,只是类型不一样而已,这对二维数组的访问时很方便的,这个你可以参照2维数组得到进一步理解,讲的有点乱,不知道你能不能理解
‘柒’ C语言数组的地址传递和值传递
1.值传递就不写了,顾名思义就是把当前的值传到下一个函数中,变量本身的没有发生任何变化
2.指针传递,把当前变量指针传到下一个函数,在另外函数里边修改指针的值会修改当前变量值
#include <stdio.h>
void func(int *p){
*p = 9;
return;
}
void swap(int *a, int *b){ //交换两个变量的值
int temp = *a;
*a = *b;
*b = temp;
}
int main(void){
int a = 0;
func(&a); //要修改一个变量,把他的地址传过去
printf("%d",a);//9
int b = 3;int c = 4;
swap(&b,&c);
return 0;
}
‘捌’ C语言数组地址问题
解释如下:
&a,*a,a,a[0]——都表示的是数组第0行第0个元素的地址;
*a[0]——这个特殊,表示第0行第0个元素的地址的地址;
a[2],&a[2]——都表示第2行第0个元素的地址;
&a[2][2]——表示第2行第2个元素的地址;
详见图片,我已经把数组中主要元素的地址和值都打印出来了,数组中对应的每个元素的地址写出来了,对照的找下对应元素的位置,应该能理解&a,*a,a,a[0],*a[0],a[2],&a[2],&a[2][2]是什么意思了
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
printf("&a十六进制地址是%p,十进制是%d
",&a,&a);//数组名,a[3][4]
printf("*a十六进制地址是%p,十进制是%d
",*a,*a);
printf("a十六进制地址是%p,十进制是%d
",a,a);
printf("a[0]十六进制地址是%p,十进制是%d
",a[0],a[0]);
printf("*a[0]十六进制地址是%p,十进制是%d
",*a[0],*a[0]);
printf("a[2]十六进制地址是%p,十进制是%d
",a[2],a[2]);
printf("&a[2]十六进制地址是%p,十进制是%d
",&a[2],&a[2]);
printf("&a[2][2]十六进制地址是%p,十进制是%d
",&a[2][2],&a[2][2]);
printf("数组a[3][4]首元素a[0][0]的地址是%p,首元素a[0][0]的值=:%d
",&a[0][0],a[0][0]);
printf("数组a[3][4]首元素a[2][0]的地址是%p,首元素a[2][0]的值=:%d
",&a[2][0],a[2][0]);
printf("数组a[3][4]首元素a[2][2]的地址是%p,首元素a[2][2]的值=:%d
",&a[2][2],a[2][2]);
printf("一个int整型变量占的字节是:%d",sizeof(int));
return0;
}
‘玖’ 如何用C语言实现调用函数的返回值为一数组的地址
就是返回一个数组的地址,比如:
int* Fun(int pArray[])
{
return pArray;
}
int pArray[] 作为参数和 int *是一样的
因为不能返回局部变量 函数的返回地址就是形参的
你要知道 你局部变量的地址是不能返回的
所以,我还是返回一个动态的地址
int* Fun()
{
int *pInt = new int[100];
return pInt;
}
这样就可以了
还有啊 最后记得释放pInt啊