❶ 求有关指针数组和多重指针的c语言程序的简单例子
#include<stdio.h>
int main()
{ char *a[3]={"abc","ewd","sss"};//a是指针数组,每个元素存放后面对应字符串的起始地址
int i;
for(i=0;i<3;i++)
puts(a[i]); //输出地址a[i]指向的字符串
return 0;
}
❷ 如何理解指针,多重指针,结构体指针
如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
1. 定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2. 空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3. void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由const修饰的变量,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = &test),才是合法的.
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv 。
❸ C语言多重指针怎样理解和赋值
#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
intmain()
{
char**p,i;
p=(char**)malloc(sizeof(char*)*50);
for(i=0;i<50;i++)
p[i]=(char*)malloc(sizeof(char)*50);
for(i=0;i<50;i++)
sprintf(p[i],"Thisisstring%d.",i);
for(i=0;i<50;i++)
{
printf("%s ",p[i]);
getch();
}
return0;
}
可以看出这里 p 是一个二维数组。
这就是二维数组的原理。
❹ C语言结构体多重指针的问题(里面为什么可以运行,但有几句话警告了)
结构体类型
typedef struct
{
int data;
struct LinkNode *next;
}LinkNode;
的定义有问题。
将其改成这样定义:
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode;
❺ c语言,多重指针。例如int **p,intq,如果p=q,那么p=&q对吗
int **p; p是二级指针。
int q; q是整型变量。
那么 p=q; 本身就是不对的。
p=&q一样不对。
都是类型不匹配。 p二级指针, &q一级指针。 q整型变量。 这三个类型都不一样。
正确做法是
int **p, *p1, q;
p1=&q;
p=&p1;
这样类型才是对的。
❻ 急急急!!!关于c语言的多重指针及函数调用问题!!!
#include<stdio.h>
void main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p1 = a;
int **p2 = &p1;
int ***p3 = &p2;
printf("第一个数的4倍数:%d ",*p1*4);
printf("第三个数的8倍数:%d ",*(*p2+2)*8);
printf("第六个数的2倍数:%d ",*(**p3+5)*2);
for(int i = 0;i<10;i++)
printf("第%d个数的10倍数:%d ",i+1,*(*p2+i)*10);
}
❼ c语言中指针和引用的区别,以及指针的多重调用
指针,全称为指针变量,是用来存储内存地址的一种变量。程序中,一般通过指针来访问其指向的内存地址中的内容(数据)。
引用,是C++中提出来的一种新的使用变量的方式,即,给实际变量起个别名,通过这个别名来引用实际的变量。标准C中不支持变量的引用。
这两个概念没有任何相关性。
指针是实实在在的变量,有自己的内存存储空间,它可以指向任何有效的变量。
引用是一种形式、方法,定义的引用变量,实际上是原实际变量的另一个名称(别名),引用变量本身没有自己的实际存储空间,操作引用变量,就是在操作实际变量。
❽ C语言中建立动态链表要用双重指针吗那个双重指针有什么作用
举个例吧,
假如一个结构:LinkNode
初始化:Initial(LinkNode **p);//这里就是双指针
那么在调用就这样,
LinkNode *p;
Initial(&p);
原理就是,如果你要通过函数来改变某个参数的值,那么就要传该参数的地址进去。
这里p是一个指针,所以要传指针的地址进去,也就是一个指向指针的指针;
初始化函数Initial(LinkNode *(*p));(*p)是指针,*(*p)就是传指针的地址进去了,意思就这样,不知道你听不听得懂。
不管动态还是静态,只要是要通过函数来改变指针类型数据的值,就要用双重指针。
❾ 关于C语言中,多重指针的问题。
int *p 定义了一个名叫p的指针它可以存储一个int型空间地址
好吧 那么这个p是不是也在内存上存在着? 是不是也会有自己的地址?
那么是不是也可能有一个指针保存着这个p的地址?
那么这个存储指针的地址的指针如何定义呢?
int **s 这也是一个指针 但是它能存储一个指针的地址(而不是一个普通的变量)
所以我们可以 这么做了
s=&p
那么s是不是也有地址?....
下面继续往下推吧 就都是一个意思了...